#ifndef DependencyPipe3OTSibling_H
#define DependencyPipe3OTSibling_H
#include"DependencyPipe2OSibling.h"

class DependencyPipe3OTSibling : public DependencyPipe2OSibling{
protected:
	virtual void addExtendedFeatures(DependencyInstance *instance, FeatureVector *fv);

	void addTriTripFeatures(DependencyInstance *instance, int par, int ch1, int ch2, int ch3, FeatureVector *fv);

	void addTriSibFeatures(DependencyInstance *instance, int ch1, int ch2, int ch3, bool isST, FeatureVector *fv);

	virtual void writeExtendedFeatures(DependencyInstance *instance, ObjectWriter &out);

public:
	DependencyPipe3OTSibling(ParserOptions *options);

	virtual ~DependencyPipe3OTSibling();

	void fillFeatureVectors(DependencyInstance* instance, 
		vector<vector<vector<double> > > &probs, vector<vector<vector<double> > > &probs_trips,
		vector<vector<vector<double> > > &probs_sibs, vector<vector<vector<vector<double> > > > &probs_ttrips,
		vector<vector<vector<vector<double> > > > &probs_tsibs, vector<vector<vector<vector<double> > > > &nt_probs, Parameters* params);

	DependencyInstance* readInstance(ObjectReader &in, int length, 
		vector<vector<vector<double> > > &probs, vector<vector<vector<double> > > &probs_trips,
		vector<vector<vector<double> > > &probs_sibs, vector<vector<vector<vector<double> > > > &probs_ttrips,
		vector<vector<vector<vector<double> > > > &probs_tsibs, vector<vector<vector<vector<double> > > > &nt_probs, Parameters* params);
};
#endif
